home *** CD-ROM | disk | FTP | other *** search
- // meal2.cxx - second attempt at pricing a meal
- #include <stream.h>
-
- enum ENTREE {Steak,Fish};
- enum DESSERT {Pie,Cake,Jello};
- enum APPETIZER {Melon,ShrimpCocktail};
-
- class Dessert // An abstract class - never instantiated by itself
- {
- public:
- virtual double cost()
- { printf("Dessert error, no cost() provided\n"); return 0;}
- };
-
- class Jello_obj : public Dessert
- {
- public:
- double cost() {return .60;}
- };
-
- class Pie_obj : public Dessert
- {
- public:
- double cost() {return 1.50;}
- };
-
- class Cake_obj : public Dessert
- {
- public:
- };
-
- class Entree
- {
- public:
- virtual double cost()
- { printf("Entree error, no cost() provided\n"); return 0;}
- };
-
- class Fish_obj : public Entree
- {
- public:
- double cost() {return 4.00;}
- };
-
- class Steak_obj : public Entree
- {
- public:
- double cost() {return 7.50;}
- };
-
- class Appetizer
- {
- public:
- virtual double cost()
- { printf("Appetizer error, no cost() provided\n"); return 0;}
- };
-
- class Cocktail_obj : public Appetizer
- {
- public:
- double cost() { return 2.00;}
- };
-
- class Melon_obj : public Appetizer
- {
- public:
- double cost() { return .85;}
- };
-
- class Meal
- {
- Appetizer *a;
- Entree *e;
- Dessert *d;
- public:
- Meal(APPETIZER=Melon,ENTREE=Fish,DESSERT=Jello);
- ~Meal();
- double cost();
- };
-
- //-------------------------------------------
- // class member function definitions
-
- double Meal::cost() {return d->cost() + a->cost() + e->cost(); }
-
- Meal::Meal(APPETIZER aval,ENTREE eval,DESSERT dval)
- {
- if ( dval == Jello ) d = new Jello_obj;
- else if ( dval == Pie ) d = new Pie_obj;
- else d = new Cake_obj;
- if ( eval == Steak ) e = new Steak_obj;
- else e = new Fish_obj;
- if ( aval == Melon ) a = new Melon_obj;
- else a = new Cocktail_obj;
- }
- Meal::~Meal() { delete a; delete e; delete d; }
- //--------------------------------------------
-
- main()
- {
- Meal m1(Melon,Fish,Jello);
- Meal m2(Melon,Steak,Pie);
- Meal m3(ShrimpCocktail,Steak,Cake);
- printf("Meal1 Price %6.2f, Meal2 price %6.2f, Meal3 price %6.2f\n"
- ,m1.cost(),m2.cost(),m3.cost());
- }
- // ---- sample output below -----
- Dessert error, no cost() provided
- Meal1 Price 5.45, Meal2 price 9.85, Meal3 price 9.50
-